/*
 * Copyright 2004-2005 公司名
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.companyname.cn/licenses
 */

package com.companyname.common.sysframe.service;

import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import com.companyname.common.base.web.service.AbstractTreeService;
import com.companyname.common.sysframe.manager.OrgManager;
import com.companyname.common.sysframe.model.Org;
import com.companyname.common.sysframe.view.foreveryone.OrgNodeOfPostTree4EveryOne;
import com.companyname.common.sysframe.view.foreveryone.OrgRootNodeOfPostTree4EveryOne;

/**
 * <p>Title:  - 查询角色,将结果通过树图表现</p>
 * <p>Description:
 *      如果有多种节点类型(根节点除外),必须传
 *      递多个根节点实体
 * </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 公司名</p>
 * @ $Author: author $
 * @ $Date: 2005/02/15 09:14:59 $
 * @ $Revision: 1.7 $
 * @ created in 2005-11-14
 *
 */


public class FindPostsForTreeViewWithOrgRootService extends AbstractTreeService
{

        /** 节点类型－根结点 */
        public static String ROOTNODE = "0";

        /** 节点类型－ 机构：非根节点 */
        public static String ORG = "1";

        static Logger logger = Logger.getLogger(FindPostsForTreeViewWithOrgRootService.class);

        private OrgManager orgManager;

        public void setOrgManager(OrgManager orgManager)
        {
                this.orgManager = orgManager;
        } 

        /** 获取树节点对应的models */
        public void createModels(Map modelsMap,
                                 HttpServletRequest request)
        {
                logger.debug("1. 获取查询条件.....");
                // 获取查询条件
                String orgId = this.getValueFromRequestParameter(request,"orgId",null);
                
                request.getSession().setAttribute("fromWhere",request.getParameter("fromWhere"));

                logger.debug("2. 获取查询条件完毕,开始查询.....");
                // 查询节点类型1
                Org rootOrg;
                if(orgId == null)
                {
                        Set orgs = new LinkedHashSet(this.orgManager.findOrgs(null));
                        rootOrg = new Org();
                        rootOrg.setSubOrgs(orgs);
                }
                else
                {
                        rootOrg = (Org)this.orgManager.get(orgId);
                }
                // 第一个元素为根节点
                modelsMap.put(ROOTNODE,rootOrg);
                // put(节点类型名称,节点对应models)
                modelsMap.put(ORG,rootOrg.getAllSubOrgs());// 父节点下面ORG类型的所有节点models
                // 其他类型节点
        }

        /** 设置nodeModel's views */
        public void setNodeViews(Map viewsMap,
                                 HttpServletRequest request)
        {
                // 从 request里面获取角色参数
                // for everyone
                viewsMap.put(ROOTNODE,new OrgRootNodeOfPostTree4EveryOne()); // 设置根节点
                viewsMap.put(ORG,new OrgNodeOfPostTree4EveryOne()); // 设置非根角色节点
        }
}
